﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;
using Entidades.Sistema.Venta;
using Mapping.Sistema.Venta;

namespace Modelo.Sistema.Venta
{
    public class CatalogoPedidos
    {
        private List<Pedido> Col_Pedidos;

        public CatalogoPedidos()
        {
            Col_Pedidos = MappingPedidos.ConsultarPedidos();
        }
        public List<Pedido> ListarPedidos()
        {
            return Col_Pedidos;
        }



        public int AgregarPedido(Pedido oPedido)
        {
            oPedido.IdPedido = NuevoPedidoID();
            Col_Pedidos.Add(oPedido);
            MappingPedidos.AgregarPedido(oPedido);
            return oPedido.IdPedido;
        }

        public bool EliminarPedido(Pedido oPedido)
        {
            Col_Pedidos.Remove(oPedido);
            return MappingPedidos.EliminarPedido(oPedido);
        }
        public void ModificarPedido(Pedido oPedido)
        {
            MappingPedidos.ModificarPedido(oPedido);
            Col_Pedidos.RemoveAll(x => x.IdPedido == oPedido.IdPedido);
            Col_Pedidos.Add(oPedido);
        }
        public void ModificarPedidoAFacturado(Pedido oPedido)
        {
            MappingPedidos.ModificarPedidoAPenFacturado(oPedido);
            Col_Pedidos.RemoveAll(x => x.IdPedido == oPedido.IdPedido);
            Col_Pedidos.Add(oPedido);
        }
        public void SetFacturado(int id)
        {
            MappingPedidos.ModificarPedidoAFacturado(id);
        }
        public Pedido BuscarPedido(int idPed)
        {
            return this.Col_Pedidos.Find(ped => ped.IdPedido == idPed);
        }

        public List<Pedido> ListarPedidosPendientes()
        {
            Col_Pedidos.Find(ped => ped.Estado == PedidosEstado.PendienteFacturacion);

            return Col_Pedidos;
        }

        

        public static int NuevoPedidoID()
        {
            IEnumerable<Pedido> editablepedidos = MappingPedidos.ConsultarPedidos();
            return (editablepedidos.Count() > 0) ? editablepedidos.Max(x => x.IdPedido) + 1 : 0;
        }

        public bool ValidarExistencia(Pedido oPedido)
        {
            if (this.Col_Pedidos.Count(ped => ped.IdPedido == oPedido.IdPedido) == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }



        //public List<Pedido> ListarPedidosPorProducto(Producto oProducto)
        //{
        //    var query = from ped in Col_Pedidos
        //                from det in ped.DetallePedidos
        //                where det.Producto.IdProducto == oProducto.IdProducto
        //                select ped;

        //    return query.ToList();
        //}

        ////public List<Pedido> ListarPedidosPorCliente(Cliente oCliente)
        ////{
        ////    var query = from ped in Col_Pedidos
        ////                where ped.Cliente.IdCliente == oCliente.IdCliente
        ////                select ped;

        ////    return query.ToList();
        ////}

        public bool buscarPedidosxCliente(int idcliente)
        {

            return Col_Pedidos.Any(ped => ped.Cliente.IdCliente == idcliente);

            
        }

    }
}
